
package com.zhiyin.seal.util;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

public class ExcelUtil {

    private static int PAGE_SIZE = 65000;

    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){
        // 第一步，创建一个HSSFWorkbook，对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }
        int rowTotalCount = values.length;
        int pageNo = (rowTotalCount + PAGE_SIZE -1) / PAGE_SIZE;
        for(int i = 0;i < pageNo;i++){
            createSheet(sheetName,(i + 1),title,values,wb,i * PAGE_SIZE);
        }

        return wb;
    }

    private static void createSheet(String sheetName,int sheetIndex,String []title,String [][]values, HSSFWorkbook wb,int start){
        // 第二步，在workbook中添加一个sheet,对应Excel文件中的sheet
        String newSheetName = sheetName + sheetIndex;
        HSSFSheet sheet = wb.createSheet(newSheetName);

        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);

        // 第四步，创建单元格，并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);

        // 声明列对象
        HSSFCell cell = null;

        // 创建标题
        for(int i=0;i<title.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }
        // 创建内容
        int index = 0;
        for(int i=start;i<values.length;i++){
            row = sheet.createRow(index + 1);
            for(int j=0;j<values[i].length;j++){
                // 将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
            index +=1;
            if(index >= PAGE_SIZE){
                return;
            }
        }
    }
}